ACID (Atomicity, Consistency, Isolation, Durability) প্রোপার্টি হল ডেটাবেস ম্যানেজমেন্ট সিস্টেমে (DBMS) যে চারটি মূল বৈশিষ্ট্য রয়েছে, যা নিশ্চিত করে যে ডেটাবেস ট্রানজেকশনগুলি সঠিকভাবে সম্পন্ন হবে এবং ডেটার অখণ্ডতা বজায় থাকবে। MongoDB একটি NoSQL ডেটাবেস হওয়ায়, এটি ঐতিহ্যবাহী রিলেশনাল ডেটাবেসের মতো পুরোপুরি ACID প্রোপার্টি সমর্থন করে না, তবে MongoDB তে কিছু ACID প্রোপার্টি বাস্তবায়ন করা হয়েছে।
ACID প্রোপার্টি
অ্যাটমিকিটি (Atomicity)
অ্যাটমিকিটি নিশ্চিত করে যে একটি ট্রানজেকশন সম্পূর্ণভাবে সফল হবে অথবা সম্পূর্ণভাবে ব্যর্থ হবে। অর্থাৎ, কোনো অংশের ব্যর্থতা পুরো ট্রানজেকশনকে ব্যর্থ করে দেয় এবং সমস্ত পরিবর্তন প্রত্যাহার করা হয়।
কনসিস্টেন্সি (Consistency)
কনসিস্টেন্সি নিশ্চিত করে যে, একটি ট্রানজেকশন ডেটাবেসের সমস্ত নিয়ম-নীতি (constraint) এবং ডেটার বৈধতা বজায় রেখে সম্পন্ন হবে। অর্থাৎ, ট্রানজেকশনের পর ডেটাবেস সঠিক অবস্থায় থাকবে।
আইসোলেশন (Isolation)
আইসোলেশন নিশ্চিত করে যে, একাধিক ট্রানজেকশন একে অপরের সাথে হস্তক্ষেপ না করে চলতে থাকবে। ট্রানজেকশনগুলোর মধ্যে কোনও ধরনের সংঘর্ষ বা ডেটার সমন্বয়ের সমস্যা হবে না।
ডিউরেবিলিটি (Durability)
ডিউরেবিলিটি নিশ্চিত করে যে, একবার ট্রানজেকশন সম্পন্ন হলে, তার সমস্ত পরিবর্তন স্থায়ীভাবে ডেটাবেসে সংরক্ষিত হবে। এমনকি সিস্টেম ক্র্যাশের পরও ডেটা হারানোর সম্ভাবনা থাকে না।
MongoDB তে ACID প্রোপার্টি বাস্তবায়ন
MongoDB, একটি NoSQL ডেটাবেস, সাধারণত ACID প্রোপার্টি সম্পূর্ণভাবে সমর্থন করে না, তবে সাম্প্রতিক সংস্করণগুলোতে কিছু ক্ষেত্রে ACID প্রোপার্টি যুক্ত করা হয়েছে। এর মধ্যে সবচেয়ে গুরুত্বপূর্ণ হল মাল্টি-ডকুমেন্ট ট্রানজেকশন সমর্থন, যা MongoDB 4.0 সংস্করণ থেকে পাওয়া যায়।
১. মাল্টি-ডকুমেন্ট ট্রানজেকশন
MongoDB 4.0 সংস্করণ থেকে মাল্টি-ডকুমেন্ট ট্রানজেকশন সমর্থিত, যা ACID প্রোপার্টি নিশ্চিত করে। একাধিক ডকুমেন্টে কার্যকরভাবে পরিবর্তন সাধন করতে হলে এটি প্রয়োজনীয়।
import com.mongodb.client.ClientSession;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
ClientSession session = mongoClient.startSession();
MongoDatabase database = mongoClient.getDatabase("myDatabase");
MongoCollection<Document> collection = database.getCollection("myCollection");
try {
session.startTransaction();
collection.insertOne(session, new Document("name", "John"));
collection.updateOne(session, new Document("name", "John"), new Document("$set", new Document("age", 30)));
session.commitTransaction();
} catch (Exception e) {
session.abortTransaction();
} finally {
session.close();
}
এখানে, একটি ট্রানজেকশন শুরু করা হয়, এরপর একাধিক ডকুমেন্টে পরিবর্তন সাধন করা হয় এবং শেষে কমিট বা অ্যাবর্ট করা হয়।
২. ট্রানজেকশনে অ্যাটমিকিটি (Atomicity)
MongoDB মাল্টি-ডকুমেন্ট ট্রানজেকশনকে অ্যাটমিক করতে সক্ষম। এর মানে হল যে, কোনো একটি অপারেশন ব্যর্থ হলে পুরো ট্রানজেকশন ব্যর্থ হয়ে যাবে এবং ডেটাবেস পূর্বাবস্থায় ফিরে যাবে।
৩. কনসিস্টেন্সি (Consistency)
MongoDB ট্রানজেকশনের পর ডেটাবেস কনসিস্টেন্ট অবস্থায় থাকবে। ট্রানজেকশনের সম্পূর্ণতা নিশ্চিত হলে, ডেটাবেসের নিয়ম ও বিধি মেনে ডেটা থাকবে।
৪. আইসোলেশন (Isolation)
MongoDB তে ট্রানজেকশনগুলি অন্য ট্রানজেকশনের সাথে একে অপরের হস্তক্ষেপ ছাড়াই চলতে পারে। এটি ট্রানজেকশনের আইসোলেশনকে সমর্থন করে এবং ডেটা সঠিকভাবে অ্যাক্সেস নিশ্চিত করে।
৫. ডিউরেবিলিটি (Durability)
MongoDB ট্রানজেকশন কমিট হলে, তা নিশ্চিতভাবে ডেটাবেসে সংরক্ষিত হয় এবং কোনো কারণে সিস্টেম বন্ধ হলে ডেটা হারানোর সম্ভাবনা থাকে না।
MongoDB তে ACID প্রোপার্টির সীমাবদ্ধতা
MongoDB কিছু ক্ষেত্রে ACID প্রোপার্টি পূর্ণরূপে বাস্তবায়ন করতে পারে না, যেমন:
- একক ডকুমেন্টের মধ্যে সমস্ত অপারেশন ACID প্রোপার্টি সমর্থন করে, কিন্তু মাল্টি-ডকুমেন্ট ট্রানজেকশন ছাড়া ঐতিহ্যবাহী MongoDB কার্যকারিতা ACID প্রোপার্টির ক্ষেত্রে সীমাবদ্ধ ছিল।
- বড় ডিস্ট্রিবিউটেড সিস্টেমে ACID প্রোপার্টি নিশ্চিত করা আরও চ্যালেঞ্জিং হতে পারে।
MongoDB 4.0 সংস্করণ থেকে ACID প্রোপার্টি সমর্থন চালু হওয়ায়, এটি আরও অনেক ক্ষেত্রেই রিলেশনাল ডেটাবেসের মতো ট্রানজেকশন পরিচালনা করতে সক্ষম হয়েছে। তবে, কিছু সীমাবদ্ধতা রয়েছে এবং এই বিষয়গুলো বুঝে MongoDB ব্যবহার করা উচিত।
Read more